/*
 * 版权所有 (C) 2018 知启蒙(ZHIQIM) 保留所有权利。
 * 
 * 欢迎到知启蒙网站（https://www.zhiqim.com）购买正版软件，知启蒙还提供许多开源框架和软件。
 * 
 * 1、本软件产品所有源代码受《中华人民共和国著作权法》和其他有关法律、法规的保护，其所有知识产权归湖南知启蒙科技有限公司所有；
 * 2、禁止复制和修改。不得复制修改、翻译或改编本软件所有源代码，或者基于本软件产品创作衍生作品；
 * 3、禁止进行逆向工程。不得对本软件的源代码进行逆向工程、反编译或试图以其他方式发现软件的源代码；
 * 4、个别授权：如需进行商业性的销售、复制、分发，包括但不限于软件销售、预装、捆绑等，必须获得知启蒙的书面授权和许可；
 * 5、保留权利：本注释未明示授权的其他一切权利仍归知启蒙所有，任何人使用其他权利时必须获得知启蒙的书面同意。
 */
package net.redxyz.repost.service;

import net.redxyz.repost.resource.model.AssRepostModel;
import net.redxyz.repost.resource.model.AssRepostPlanChk;
import net.redxyz.repost.service.handler.RepostHandler;
import net.redxyz.repost.service.handler.RepostPlanChkHandler;
import net.redxyz.repost.service.handler.RepostPlanHandler;
import net.redxyz.repost.service.handler.UserErrHandler;
import net.redxyz.repost.service.task.repost.RepostPlanChkTask;
import net.redxyz.repost.service.task.repost.RepostPlanTask;
import net.redxyz.repost.service.task.repost.RepostScheduleTask;
import net.redxyz.repost.service.task.tmc.TmcFuwuTask;
import net.redxyz.repost.service.task.tmc.TmcTask;
import net.redxyz.repost.service.task.user.UserCleanupTask;
import net.redxyz.repost.service.task.user.UserOrderDayStatTask;
import net.redxyz.repost.service.task.user.UserOrderSyncTask;
import net.redxyz.repost.service.task.user.UserTokenCheckTask;
import net.redxyz.top.TaobaoServer;
import net.redxyz.top.repost.dbo.AssRepostPlan;

import org.zhiqim.kernel.Global;
import org.zhiqim.kernel.Servicer;
import org.zhiqim.kernel.control.HandlerController;
import org.zhiqim.kernel.schedule.Day;
import org.zhiqim.kernel.schedule.Hour;
import org.zhiqim.kernel.schedule.Minute;
import org.zhiqim.kernel.schedule.Scheduler;

/**
 * 自动上架服务启动类
 *
 * @version v1.0.0 @author zouzhigang 2014-3-20 新建与整理
 */
public class Main extends Servicer
{
    private HandlerController controller;
    
    /** 工程初始化接口 */
    public boolean create() throws Exception
    {
        // 创建请求处理控制器，对不同的请求作相应的处理
        int threadNum = Global.getInt(id, "threadNum", 2);
        controller = new HandlerController();
        controller.set(threadNum, threadNum, 60 * 30, 999999);
        controller.create();

        controller.addHandler(AssRepostPlanChk.class, new RepostPlanChkHandler());
        controller.addHandler(AssRepostPlan.class, new RepostPlanHandler());
        controller.addHandler(AssRepostModel.class, new RepostHandler());
        
        if (!Global.isTrue(id, "scheduler"))
            return true;
        
        //任务
        Scheduler scheduler = Global.getWithoutNew(Scheduler.class);
        
        //用户相关
        scheduler.addTask(new Hour(new UserOrderSyncTask(), 5, 1));
        scheduler.addTask(new Day(new UserOrderDayStatTask(), 3, 59, 1));
        scheduler.addTask(new Day(new UserTokenCheckTask(), 0, 0, 1));
        scheduler.addTask(new Day(new UserCleanupTask(), 3, 0, 1));
        
        //TMC任务
        scheduler.addTask(new Minute(new TmcTask(), 3));
        scheduler.addTask(new Minute(new TmcFuwuTask(), 13));
        
        //上下架任务
        scheduler.addTask(new Minute(new RepostPlanTask(), 0));
        scheduler.addTask(new Day(new RepostPlanChkTask(), 5, 37, 11));
        scheduler.addTask(new Minute(new RepostScheduleTask(), 0));
        return true;
    }
    
    public void destroy()
    {
        if (controller != null)
        {
            controller.destroy();
            controller = null;
        }
    }
    
    public void postRequest(AssRepostPlanChk obj)
    {
        controller.execute(obj);
    }

    public void postRequest(AssRepostPlan obj)
    {
        controller.execute(obj);
    }

    public void postRequest(AssRepostModel obj)
    {
        controller.execute(obj);
    }

}
